home *** CD-ROM | disk | FTP | other *** search
- // the implementation of class KBAN_DATA
- // Copyright (C) 1996 Kazutaka Hirata <khirata@jove.acs.unt.edu>
-
- #include "file.h"
-
- #include "kbandata.h"
-
- /*
- KBAN_DATA COMPONENT_LIST COMPONENT_ELEMENT LAYER PIN_LIST LINE_LIST
- ---------------------------------------------------------------------------
- 200A8 200A8 n/a 200A8 200A8 200A8 200A8
- 200B0 200A8 n/a 200A8 200A8 200B0 200A8
- 200B18 200B18 200B18 200B18 200A8 200B0 200A8
- */
-
- void KBAN_DATA::operator=(const KBAN_DATA& src)
- {
- m_primitive = src.m_primitive ;
- m_component_list = src.m_component_list;
- }
-
- uint KBAN_DATA::load_get_version(FILE_NEW &fp) const
- {
- FILE_VERSION fver;
- char str[1024];
- fp.gets_wo_return(str, 1024);
- return fver.get_version_no(str);
- }
-
- enum KBAN_DATA_KIND {
- KBAN_DATA_KIND_PRIMITIVE,
- KBAN_DATA_KIND_COMPONENT,
- KBAN_DATA_KIND_UNKNOWN
- };
-
- void KBAN_DATA::clear(void)
- {
- primitive ().clear();
- component_list().clear();
- }
-
- XY KBAN_DATA::get_max(void) const
- {
- return ::get_max(primitive().get_max(), component_list().get_max());
- }
-
- XY KBAN_DATA::get_min(void) const
- {
- return ::get_min(primitive().get_min(), component_list().get_min());
- }
-
- void KBAN_DATA::shift(const XY& ac_dif, KBAN_DATA& target) const
- {
- primitive ().shift(ac_dif, target.primitive ());
- component_list().shift(ac_dif, target.component_list());
- }
-
- void KBAN_DATA::unselect(void)
- {
- primitive ().unselect();
- component_list().unselect();
- }
-
- void KBAN_DATA::select_items_in_block(const XY& ac1, const XY& ac2)
- {
- primitive ().select_items_in_block(ac1, ac2);
- component_list().select_items_in_block(ac1, ac2);
- }
-
- void KBAN_DATA::collect_selected_items(KBAN_DATA& dst) const
- {
- primitive ().collect_selected_items(dst.primitive() );
- component_list().collect_selected_items(dst.component_list());
- }
-
- void KBAN_DATA::remove_selected_items(void)
- {
- primitive ().remove_selected_items();
- component_list().remove_selected_items();
- }
-
- int KBAN_DATA::load_170(FILE_NEW& fp)
- {
- for(;;) {
- char str[1024];
- if(fp.gets_wo_return(str, 1024) == NULL) {
- break;
- } else {
- if(!strcmp(str, "primitive")) {
- primitive().load_primitive_170(fp);
- } else if(!strcmp(str, "component")) {
- component_list().load_170(fp);
- break;
- } else {
- // coprrupted
- break;
- }
- }
- }
- return true;
- }
-
- static const INTSTR_ELEMENT kban_data_kind_str_table[] = {
- {KBAN_DATA_KIND_PRIMITIVE, "primitive"},
- {KBAN_DATA_KIND_COMPONENT, "component"},
- {KBAN_DATA_KIND_UNKNOWN , NULL }
- };
-
- int KBAN_DATA::load_200a8(FILE_NEW &fp)
- {
- for(;;) {
- char str[1024];
- fp.gets_wo_return(str, 1024);
- if(!strcmp(str, "end")) {
- break;
- } else {
- INTSTR_TABLE table(kban_data_kind_str_table, KBAN_DATA_KIND_UNKNOWN);
- KBAN_DATA_KIND kind = (KBAN_DATA_KIND)table.get_no(str);
- switch(kind) {
- case KBAN_DATA_KIND_PRIMITIVE : {
- primitive().load(fp);
- break;
- }
- default : {
- break;
- }
- }
- }
- }
- return true;
- }
-
- int KBAN_DATA::load_200b18(FILE_NEW& fp)
- {
- for(;;) {
- char str[1024];
- fp.gets_wo_return(str, 1024);
- if(!strcmp(str, "end")) {
- break;
- } else {
- INTSTR_TABLE table(kban_data_kind_str_table, KBAN_DATA_KIND_UNKNOWN);
- KBAN_DATA_KIND kind = (KBAN_DATA_KIND)table.get_no(str);
- switch(kind) {
- case KBAN_DATA_KIND_PRIMITIVE : {
- primitive().load(fp);
- break;
- }
- case KBAN_DATA_KIND_COMPONENT : {
- component_list().load(fp);
- break;
- }
- default : {
- break;
- }
- }
- }
- }
- return true;
- }
-
- int KBAN_DATA::load(FILE_NEW &fp)
- {
- typedef int (KBAN_DATA::*LOAD_FUNC)(FILE_NEW &fp);
- LOAD_FUNC load_func;
- int retval;
-
- uint version = load_get_version(fp);
- switch(version) {
- case FILE_VERSION::VERSION_170 : {
- load_func = &KBAN_DATA::load_170;
- break;
- }
- case FILE_VERSION::VERSION_200A8 : {
- load_func = &KBAN_DATA::load_200a8;
- break;
- }
- case FILE_VERSION::VERSION_200B0 : {
- load_func = &KBAN_DATA::load_200a8; // the same as 200a8
- break;
- }
- case FILE_VERSION::VERSION_200B18 : {
- load_func = &KBAN_DATA::load_200b18;
- break;
- }
- default : {
- load_func = NULL;
- }
- }
- if(load_func != NULL) {
- (this->*load_func)(fp);
- retval = true;
- } else {
- retval = false;
- }
- return retval;
- }
-
- int KBAN_DATA::save(FILE_NEW &fp) const
- {
- FILE_VERSION fver;
- fp.printf("%s\n", fver.get_version_str(FILE_VERSION::VERSION_200B18));
-
- fp.puts("primitive\n");
- primitive().save(fp);
-
- fp.puts("component\n");
- component_list().save(fp);
-
- fp.puts("end\n");
- return true;
- }
-
- void KBAN_DATA::collect_aperture(APT_TABLE &apt_pin_table, APT_TABLE &apt_line_table) const
- {
- primitive ().collect_aperture(apt_pin_table, apt_line_table);
- component_list().collect_aperture(apt_pin_table, apt_line_table);
- }
-
- void KBAN_DATA::operator+=(const KBAN_DATA &target)
- {
- primitive () += target.primitive ();
- component_list() += target.component_list();
- }
-
- bool KBAN_DATA::empty() const
- {
- return primitive().empty() && component_list().empty();
- }
-
- void KBAN_DATA::rotate_90()
- {
- primitive ().rotate_90();
- component_list().rotate_90();
- }
-
- void KBAN_DATA::limit_drill_size(uint drill)
- {
- primitive ().limit_drill_size(drill);
- component_list().limit_drill_size(drill);
- }
-